// 泛型  Generics
function echo(arg) {
  return arg
}
const result0 = echo(123)
// 这时候我们发现了一个问题，我们传入了数字，但是返回了 any

function echo2<T>(arg: T): T {
  return arg
}
const result2 = echo(123)

// 泛型也可以传入多个值
function swap<T, U>(tuple: [T, U]): [U, T] {
  return [tuple[1], tuple[0]]
}

const result3 = swap(['string', 123])


let arrNum:number[] = [0,1,2,3]
let arrStrs:String[] = ['a','b','c']

function reverse<T>(arr:T[]){
  const _arr:T[] = []
  for(let i = _arr.length -1; i>=0; i--) {
    _arr.push(arr[i])
  }
  return _arr;
}

const newArrs = reverse(arrNum)
